package com.freeheart.aop.antireapte;

/**
 * 防重复提交的锁
 */
public interface AntiRepeatLock {

    /**
     * 拿锁。允许抛异常，视为获取锁失败。
     *
     * @param key Key
     * @return 是否拿到锁。true表示拿到。false表示未拿到
     */
    boolean tryLock(String key);

    /**
     * 释放锁
     *
     * @param key key
     */
    void unlock(String key);

    /**
     * 实际用到的拿锁方法，不允许实现类重写该方法
     *
     * @param key
     * @return
     */
    default boolean acquireLock(String key) {
        try {
            return tryLock(key);
        } catch (Exception e) {
            return false;
        }
    }

}
